1.1 ARM简介
1.1.1 ARM概述
ARM是Advanced RISC Machines的缩写,它是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。
ARM(Advanced RISC Machines)有3种含义:
1.一个公司的名称;
2.一类微处理器的通称;
3.一种技术的名称。
ARM微处理器的特点:
1.体积小、低功耗、低成本、高性能;
2.支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;
3.大量使用寄存器,指令执行速度更快;
4.大多数数据操作都在寄存器中完成;
5.寻址方式灵活简单,执行效率高;
6.指令长度固定。
1.1.2 ARM微处理器系列
ARM处理器的产品系列非常广,包括ARM7、ARM9、ARM9E、ARM10E、ARM11和Cortex等。以及其它厂商基于ARM体系结构的处理器,除了具有ARM体系结构的共同特点以外,每一系列提供一套特定的性能来满足设计者对功耗、性能、体积的需求。
ARM 公司提供了ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7、ARMv8 和ARMv9共九种不同的架构,其中 ARMv1 和 ARMv2 都没有太大的实际使用价值,从 ARMv3 开始才逐步开始正式商用。
从 ARMv3 架构开始,ARM 推出了对应的 ARM6、7 处理器类型(系列),目前常见的 ARM 处理器类型(系列)有 ARM7、ARM9、ARM10、ARM11 和 Cortex。而每个系列处理器中又有许多不同的类型,如 ARM9 系列就有 ARM9E-S、ARM966E-S 等类型。
体系架构 | 具体处理器类型(系列) |
---|---|
ARMv1 | ARM1 |
ARMv2 | ARM2、ARM3 |
ARMv3 | ARM6、ARM7 |
ARMv4 | StrongARM、ARM7TDMI、ARM9TDMI、ARM940T、ARM920T、ARM720T |
ARMv5 | ARM9E-S、ARM966E-S、ARM1020E、ARM 1022E、XScale、ARM9EJ-S、ARM926EJ-S、ARM7EJ-S、ARM1026EJ-S、ARM10 |
ARMv6 | ARM11 系列(ARM1136J(F)-S、ARM1156T2(F)-S、ARM1176JZ(F)-S 和 ARM11 MPCore)、Cortex-M |
ARMv7 | Cortex-A、Cortex-M、Cortex-R |
ARMv8 | Cortex-A35, Cortex-A53, Cortex-A57, Cortex-A72, Cortex-A73 |
ARMv9 | Cortex-A510, Cortex-A710, Cortex-X2, Neoverse N2 |
基于ARMv7版本的ARM Cortex系列产品由A、R、M三个系列组成,具体分类延续了一直以来ARM面向具体应用设计CPU的思路。
A应用处理器(Application Processor )系列
Cortex-A 处理器包括 Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12 和 Cortex-A15 共 6 个子系列,用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域,如智能手机、平板电脑、汽车娱乐系统、数字电视等。
Cortex-A 系列处理器均适用于各种不同的性能应用领域,其共享 ARMv7-A 的架构和功能集,成为开放式平台设计的最佳解决方案并且可以为不同设计之间的软件提供兼容性和可移植性,其提供了 ARM、Thumb-2、Thumb、Jazelle、DSP 的指令集支持、TrustZone 安全扩展、高级单精度和双精度浮点支持、NEON 媒体处理引擎及对包括 Linux 全部分发版本(Android、Chrome、Ubuntu和Debian)、Linux 第三方(MontaVista、QNX、Wind River、Symbian、Windows CE)、需要使用内存管理单元的其他操作系统支持。
R实时控制处理(Real Time Control )系列
Cortex-R 系列处理器包括 Cortex-R4、Cortex-R5、Cortex-R7 共 3 个子系列,其对低功耗、良好的中断行为、卓越性能及与现有平台的高兼容性这些需求进行了平衡考虑,具有高性能、实时、安全和经济实惠的特点,面向如汽车制动系统、动力传动解决方案、大容量存储控制器等深层嵌入式实时应用。例如硬盘控制器(或固态驱动控制器)、企业中的网络设备和打印机、消费电子设备(例如蓝光播放器和媒体播放器)、以及汽车应用(例如安全气囊、制动系统和发动机管理)。
Cortex-R 系列处理器使用了深度流水化微架构及指令预取、分支预测和超标量执行等性能增强技术,提供了硬件除法、浮点单元(FPU)选项和硬件 SIM DSP,采用了可以在不牺牲性能的前提下实现高密度代码的带 Thumb-2 指令的 ARMv7-R 架构和带指令、指令 cache 控制器的哈佛架构,并且拥有获得快速响应代码和数据处理器本地的紧密耦合内存(TCM)和高性能 AMBA3 的 AXI 总线接口。
M微控制器(Micro Controller )系列
Cortex-M 系列处理器包括 Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4 共 5 个子系列,该系列主要针对成本和功耗敏感的应用,如智能测量、人机接口设备、汽车和工业控制系统、家用电器、消费性产品和医疗器械等。
Cortex-M处理器家族更多的集中在低性能端,但是这些处理器相比于许多微控制器使用的传统处理器性能仍然很强大。例如,Cortex-M4和Cortex-M7处理器应用在许多高性能的微控制器产品中,最大的时钟频率可以达到400Mhz。
1.2为什么要学习Cortex-M
目前市场上ARM主流的芯片基本都是Cortex系列,下图展示了一个基于Cortex的系统。
从上图可以看出,Cortex-M应用非常广泛,应用领域非常多,尤其是在嵌入式领域,Cortex-M系列的芯片介于低端和高端之间,它相对于普通的 8/16 位机有更多的片上外设,更先进的内核架构,可以运行RT-Thread等实时操作系统;相对于可运行 Linux 操作系统的高端 CPU,其成本低,实时性强。这个定位使得 Cortex-M不仅占领了大部分中端控制器的市场,更是成为提升开发者技术的优良过渡平台,为后续的学习打下坚实的基础。
Cortex-M 系列处理器偏重于工业控制,其提供了更低的功耗和更长的电池寿命,提供了更少的代码和更高的性能,并且提供了兼容性的代码、统一的工具和操作系统支持,具有如下优点:
在具有对内存大小要求苛刻的应用中具有很大的优势;
可以通过 C语言编程,并且附带了各种高级调试功能,能帮助定位软件中的问题,同时网上具有大量的应用实例可以参考;
提供了较大的能效优势,面对如 USB、蓝牙、WiFi 等连接及如加速计和触摸屏等复杂模拟传感器且成本日益降低的产品需求有极大的优势;
采用了 8 位和 16 位的数据传输,从而可以高效地利用数据内存,同时开发者可以使用其在面向 8/16 位系统的应用代码中的相同的数据类型;
虽然使用 32 位的指令,但是其使用了可提供极佳代码密度的 ARM Thumb-2 技术,也可以支持 16 位的 Thumb 指令,其对应的 C 编译器也会使用 16 位版本的指令,可以更加有效地执行运算。
前面讲述了Cortex-M的这么多优势,我想很多朋友都会对Cortex-M产生浓厚的兴趣,而且Cortex-M系列的学习资源非常丰富,非常适合新手学习使用。
要想真正明白为何要学习Cortex-M,就需要了解嵌入式的知识结构,让读者朋友对于嵌入式工程师有一个全面系统地了解,并在此基础上引导工程师规划自己职业生涯。
1.2.1 嵌入式技术知识结构
嵌入式技术是专用计算机系统技术,它以应用为核心,以计算机技术为基础,软硬件均可裁剪,适用在对功能、稳定性、功耗有严格要求的系统之中。嵌入式技术的开发人员需要对整个计算机体系(从底层硬件到软件操作系统)都有了解,而在这个体系之中,每个部分都可以分出一些小领域,因而技术要求很高。
这个图只是粗略地概括了嵌入式技术的知识结构,但从中已经可以看出它涉及的知识面非常广,难怪众多学生甚至技术人员总是“迷茫”。不少电子专业出身的嵌入式技术人员主要从事硬件抽象层(中间层)的开发,这一层是沟通嵌入式系统的硬件层和软件操作系统的桥梁,因而主要的工作是开发驱动程序、板级应用支持、协调软硬件的开发,因而对软硬件都要有深入的了解。
1.2.2 嵌入式工程师成长之路
1. 从学生成为工程师
若希望从事硬件抽象层的开发,应该如何学习这些知识,才能从学生过渡到工程师呢?对于希望成为其他方向的嵌入式技术人员也可以参考。从图中可以看出,越往上层深入,就越接近于纯软件开发,但这并不代表嵌入式技术人员就不需要了解硬件,相反,上层的知识都是以底层为基础的,很多人说的“做嵌入式软件开发至少要读懂原理图”就是这个道理。
[
2. 职业规划
在嵌入式技术领域的公司,除了工程师还分很多职业岗位。一般公司的研发部门职位。
一般需要3 ~ 5年过渡到下一级的岗位,在小公司里项目经理一般也兼任部门经理。部门经理不一定要懂技术,并不是非由项目经理升职而成。直接与技术相关的是开发工程师和系统架构师,开发工程师会针对嵌入式技术的不同领域有不同的区分。在小公司里,熟悉软硬件的跨领域工程师很受欢迎,而大公司则分工明确,更看重在某领域研究得深入的开发工程师。作为系统架构师,则需要熟悉整个嵌入式领域,能够协调不同领域的开发工程师进行项目开发。
对于职业规划,不同的人有不同的见解,情况千差万别,以上所述仅供读者参考。
1.3学习Cortex-M需要哪些基础
首先要对C语言有一定的了解,不用学到精通,只要会使用一些简单的命令语句。比如赋值语句、if语句、for循环语句、while语句、一维数组、二维数组等。还有一点需要重点学习的是函数的定义、调用,参数的传递与参数的返回。推荐给大家一本学C语言的书籍《谭浩强C语言程序设计》,这本书也是很多大学里的教材,写的很详细。当然,还有就是林锐博士的《高质量程序设计指南C++/C语言》,对C++/C语言进行了更深入的论述,还有很多编程规范,很值得一读。
当你学会了C语言,说明你已经掌握了软件的基础了,接下来需要学习一些硬件的基础知识。可以到书店买两本数字电路与模拟电路相关的书籍,建议你不用学的太深,只要简单的了解能看懂原理图就可以了,等到你真正到工作岗位上,大的公司里软件开发人员和硬件设计人员都是分开的,只有专心做一件事情才能做的精益求精,有一个好的发展。如果你以前学过51单片机,你一定熟悉C语言、模拟电路和数字电路。那么你就可以直接学习Cortex-M。需要注意的是我们以前学习51单片机时都是直接操作寄存器,而现在我们学习Cortex-M大部分都是调用库函数。
对初学者的要求是具有基本的单片机基础,如 51、AVR 等,曾使用 C 语言写过单片机程序,但不需精通。读者朋友在学习 Cortex-M的时候,无需太担心自己的基础,我们更需要的是学习的勇气,需要的是拿下 Cortex-M的决心。试问,我们刚开始学习最简单的单片机的时候,是不是也没基础呢,是不是因此就停止了自己学习的脚步了呢?不是的。我们需要做的是认定一个目标,行动起来,坚持朝向目标的苦行,其中艰辛芳华,唯你自知。
1.4 如何学习Cortex-M
我想这个问题恐怕很难回答,每个人的基础不同,学习方法不同,自然学习起来的成效就会不一样,但不管如何,学习Cortex-M步骤无外乎有以下几步:
第一步:适应使用固件库的开发方式,加强运用 C 语言的能力,建立工程管理意识。
第二步:熟悉 Cortex-M 系列芯片架构,了解 CMSIS 标准,熟悉 Cortex-M的总线架构。
第三步:掌握 I2C、SPI、SDIO、CAN、TCP/IP 等各种通信协议,掌握了这些协议,开发软件驱动就变得相对容易了。
最后,为例便于大家学习,我将持续更新一系列关于Cortex-M的教程,以大家熟知的STM32为主进行讲解,但不仅限于STM32,也会讲解一些国产的MCU,比如GD32。
整套教程主要分为五篇:
1.入门篇:主要介绍Cortex-M的基本概念,嵌入式开发所需的硬件平台、以及Cortex-M开发环境的搭建与使用等。
2.基础篇:主要帮助初学者快速上手 Cortex-M,介绍时钟、中断、存储、模拟输入输出、串口通信、SPI、I2C等知识。以点亮 LED 灯的实例,从软件工程的角度深入剖析什么是固件库、为什么使用固件库和怎样使用固件库;从固件库、新建工程、编译和下载程序出发,了解如何操作 GPIO,让新手步步为营,尽享 Cortex-M的学习乐趣。该部分主要讲解MCU的片上外设。
3.外设篇:对目前市面上常用的传感器、通信设备等外设进行分类讲解,这部分内容的重点在于讲解传感器或通信设备所涉及的协议、以及外围设备本身所涉及的相关知识。主要讲解的是外围芯片的使用方法。主要有24C04、FLASH芯片、红外发射与接收、MP3、FM收音机、USB通讯、以太网、触摸屏等外围设备。
4.系统篇:以RT-thread作为开发系统,主要讲解网络协议栈、文件系统等比较复杂的内容。
5.项目篇:主要讲解一些嵌入式项目的基本流程和原理。
纸上得来终觉浅,绝知此事要躬行,学习嵌入式一定要实践,我相信只要坚持不懈,不放弃,坚持不懈,那么你一定会成为一名Cortex-M高手。